/*
 * AqueousActivity.h
 *
 *  Created on: 23 May 2011
 *      Author: allan
 */

#ifndef AQUEOUSACTIVITY_H_
#define AQUEOUSACTIVITY_H_

// C++ includes
#include <functional>
using namespace std;
using namespace std::placeholders;

// GeoReact includes
#include "Utils.h"

// GeoReact forward declarations
class AqueousPhase;

typedef std::function<const DoubleVector (const AqueousPhase& aqueousPhase, double T, double P, const DoubleVector& n)> 
IonicActivityFunction;
	
typedef std::function<const double (const AqueousPhase& aqueousPhase, double T, double P, const DoubleVector& n)> 
NeutralActivityFunction;

const IonicActivityFunction
HkfIonicActivityModel(const StringVector& ionsNames);

const NeutralActivityFunction
SetschenowActivityModel();

const NeutralActivityFunction
SetschenowActivityModel(double b);

const NeutralActivityFunction
SetschenowActivityModel(const DoubleVector& bi, const DoubleVector& Ti);

const NeutralActivityFunction
HkfWaterActivityModel(const StringVector& ionsNames);

const NeutralActivityFunction
DrummondCO2ActivityModel();

#endif /* AQUEOUSACTIVITY_H_ */
